<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // Function 实例的 call() 方法会以给定的 this 值和逐个提供的参数调用该函数。
        /**
         * 定义myCall方法
         * 设置this并且调用函数
         * 接收剩余参数，并返回结果
         * 使用symbol调优
        */
        var obj = {
            name: '猪脚饭'
        }

        function func (num1, num2) {
            console.log(this, num1, num2)
            return num1 + num2
        }

        Function.prototype.myCall = function (context, ...args) {
            context = context ? Object(context) : globalThis
            const key = Symbol('temp')
            context[key] = this
            const res = context[key](...args)
            return res
        }
        const res = func.myCall(obj, 1, 2)
        console.log(res)

        // Function 实例的 apply() 方法会以给定的 this 值和作为数组（或类数组对象）提供的 arguments 调用该函数。
    </script>
</body>
</html>